doctype html
html
  head
    title 文件上传
    script(src="https://static.dayclover.com/quickapp-dp-h5/axios.js")
    style.
      body {
        font-family: Arial, sans-serif;
        background-color: #f4f4f4;
        margin: 0;
        padding: 20px;
      }
      h1 {
        color: #333;
      }
      form {
        background: #fff;
        padding: 20px;
        border-radius: 5px;
        box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
        position: relative;
      }
      input[type="file"] {
          margin-bottom: 10px;
          min-width: 400px;
          height: 100px;
          width: 100%;
      }
      button {
        background-color: #28a745;
        color: white;
        border: none;
        padding: 10px 15px;
        border-radius: 5px;
        cursor: pointer;
        position: absolute;
        left: 400px;
        bottom: 36px;
      }
      button:disabled {
        background-color: #6c757d; // 灰色背景表示禁用状态
        cursor: not-allowed;
        opacity: 0.7; // 添加透明度变化
      }
      button:hover:enabled {
        background-color: #218838;
      }
      #downloadButton {
        display: none;
        margin-top: 10px;
        position: unset;
      }
      .error {
        color: red;
        margin-top: 10px;
      }
      .loading {
        display: none;
        margin-top: 10px;
        color: #007bff;
      }

    script.
      let uploadedFileName = ''; // 用于存储上传的文件名
      let signedFileName = ''; // 用于存储签名文件名
      let pollingAttempts = 0; // 轮询次数
      let isUploading = false; // 上传状态

      function checkForSignedFile() {
        if (!uploadedFileName) {
          console.error('未找到上传的文件名');
          return; // 如果没有文件名，直接返回
        }

        // 确保文件名在发送请求前被正确编码
        const encodedFileName = encodeURIComponent(uploadedFileName);

        axios.get(`/check-signed-file?fileName=${encodedFileName}`, {
          headers: {
            'Accept': 'application/json; charset=utf-8;' // 设置请求头为 JSON
          }
        })
          .then(response => {
           
            const data = response.data; // 获取响应数据
            console.log('response',response,data)
            if(data.code == "400"){
               clearInterval(window.pollingInterval); // 停止轮询
               isUploading = false; // 重置上传状态
               document.querySelector('button[type="submit"]').disabled = false; // 重新启用上传按钮
               alert(data.msg);
               return 
            }
            if (data.code == "200") {
            
              signedFileName = data.fileName; // 存储签名文件名
              clearInterval(window.pollingInterval); // 停止轮询
              document.getElementById('downloadButton').style.display = 'block'; // 显示下载按钮
              document.getElementById('loading').style.display = 'none'; // 隐藏 loading
              isUploading = false; // 重置上传状态
              document.querySelector('button[type="submit"]').disabled = false; // 重新启用上传按钮
              document.getElementById('errorMessage').innerText = ''; // 清空错误信息
              alert('文件已签名！');
            } else {
              pollingAttempts++;
              if (pollingAttempts >= 10) {
                clearInterval(window.pollingInterval); // 停止轮询
                document.getElementById('errorMessage').innerText = data.msg; // 显示错误信息
                document.getElementById('loading').style.display = 'none'; // 隐藏 loading
                isUploading = false; // 重置上传状态
                document.querySelector('button[type="submit"]').disabled = false; // 重新启用上传按钮
              }
            }
          })
          .catch(error => {
            console.error('Error:', error);
            clearInterval(window.pollingInterval); // 确保停止轮询
            document.getElementById('loading').style.display = 'none'; // 隐藏 loading
            isUploading = false; // 重置上传状态
            document.querySelector('button[type="submit"]').disabled = false; // 重新启用上传按钮
          });
      }

      function startPolling() {
        pollingAttempts = 0; // 重置轮询次数
        window.pollingInterval = setInterval(() => {
          if (pollingAttempts < 10) {
            checkForSignedFile();
            
          } else {
            clearInterval(window.pollingInterval); // 停止轮询
            document.getElementById('errorMessage').innerText = '轮询超时，未找到签名文件'; // 显示超时信息
            document.getElementById('loading').style.display = 'none'; // 隐藏 loading
            isUploading = false; // 重置上传状态
            document.querySelector('button[type="submit"]').disabled = false; // 重新启用上传按钮
            alert('签名失败，请检查apk文件')
          }
        }, 2000); // 每2秒检查一次
      }

      function onUploadSuccess() {
        startPolling(); // 上传成功后开始轮询
      }

      // 在文件上传时保存文件名
      function handleFileUpload(event) {
        event.preventDefault(); // 阻止默认表单提交
        const fileInput = event.target.elements.file;
        if (fileInput.files.length > 0) {
          uploadedFileName = fileInput.files[0].name; // 获取上传的文件名
          document.getElementById('downloadButton').style.display = 'none'; // 隐藏下载按钮
          document.getElementById('errorMessage').innerText = ''; // 清空错误信息
        }
        window.pollingInterval&&clearInterval(window.pollingInterval); // 停止轮询

        if (!isUploading) {
          isUploading = true; // 设置上传状态
          document.getElementById('loading').style.display = 'block'; // 显示 loading
          document.querySelector('button[type="submit"]').disabled = true; // 禁用上传按钮

          // 使用 Axios 发送请求
          const formData = new FormData(event.target);
          axios.post('/upload', formData, {
            headers: {
              'Content-Type': 'multipart/form-data', // 设置请求头为 multipart/form-data
              'Accept': 'application/json;charset=utf-8;' // 设置请求头为 JSON
            }
          })
          .then(response => {
            if (response.data.code !== 200) {
              document.getElementById('errorMessage').innerText = response.data.msg; // 显示错误信息
              isUploading = false; // 重置上传状态
              document.getElementById('loading').style.display = 'none'; // 隐藏 loading
              document.querySelector('button[type="submit"]').disabled = false; // 重新启用上传按钮
            } else {
              onUploadSuccess(); // 上传成功后开始轮询
            }
          })
          .catch(error => {
            console.error('上传错误:', error);
            document.getElementById('loading').style.display = 'none'; // 隐藏 loading
            isUploading = false; // 重置上传状态
            document.querySelector('button[type="submit"]').disabled = false; // 重新启用上传按钮
          });
        }else{
          isUploading = false; // 重置上传状态
            document.querySelector('button[type="submit"]').disabled = false; // 重新启用上传按钮
        }
      }

      // 下载文件
      function downloadFile() {
        return window.open(location.origin + `/download-signed-apk?fileName=${encodeURIComponent(signedFileName)}`);
      }

      // 添加文件选择事件监听器
      document.addEventListener('DOMContentLoaded', () => {
        const fileInput = document.querySelector('input[type="file"]');
        fileInput.addEventListener('change', () => {
          document.getElementById('downloadButton').style.display = 'none'; // 隐藏下载按钮
        });
      });
  body
    h1= "app自动签名工具"
    form(action="/upload" method="POST" enctype="multipart/form-data" onsubmit="handleFileUpload(event);")
      input(type="file" name="file")
      button(type="submit") 上传文件
    div#loading.loading 正在上传，请稍候...
    div#result
    button#downloadButton(type="button" onclick="downloadFile()") 下载签名文件
    div.error#errorMessage // 用于显示错误信息